﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using RAE.Logica.Controladores;
using RAE.Logica.Info;
using RAE.GUI.Configuracion;
using RAE.GUI.Info;
using System.Text.RegularExpressions;
using RAE.Persistencia;

namespace RAE.GUI.Info
{
    /// <summary>
    /// Interaction logic for HistorialElo.xaml
    /// </summary>
    public partial class HistorialElo : Window
    {
        public HistorialElo()
        {
           
            InitializeComponent();
            init();
        }
        #region Metodos de Arranque
        private void init()
        {
            cargarHistorial();
            crearColumnas();
            asignarGreed();            
        }

        private void asignarGreed()
        {
            historial.ItemsSource = Aplicacion.ajedrecistas;
            historial.Items.Refresh();
        }
        private void crearColumnas() 
        {
            for (int i = 0; i < Aplicacion.periodos.Count; i++)
            {
                Periodo periodo = Aplicacion.periodos[i];
                DataGridTextColumn column = new DataGridTextColumn();
                column.Header = periodo.fecha.Date;
                column.IsReadOnly = true;
                column.Binding = new Binding("historial [" + i + "].puntajeElo");
                historial.Columns.Add(column);
                historial.Items.Refresh();
            }
        }
        private void cargarHistorial()
        {
            foreach (Ajedrecista a in Aplicacion.ajedrecistas)
            {
                a.getHistorialElo();
            }
        }
        #endregion
       
        #region Filtros
        private void tipoFiltrado()
        {
            try
            {
                if ((bool)radioTodo.IsChecked) asignarGreed();

                textCedula.IsEnabled = (bool)radioCedula.IsChecked;
                if ((bool)radioCedula.IsChecked) filtroCedula();

                textNombre.IsEnabled = (bool)radioNombre.IsChecked;
                if ((bool)radioNombre.IsChecked) filtroNombre();
            }
            catch (Exception e) { }
        }
        private void filtroNombre()
        {
            historial.ItemsSource = Aplicacion.ajedrecistas.Select(a => a)
                                                           .Where(a => Regex.IsMatch(a.nombre.Trim() + " " + a.apellidos.Trim(), textNombre.Text, RegexOptions.IgnoreCase));
            historial.Items.Refresh();
        }
        private void filtroCedula()
        {
            historial.ItemsSource = Aplicacion.ajedrecistas.Select(a => a)
                                                                      .Where(a => Regex.IsMatch(a.cedula, textCedula.Text, RegexOptions.IgnoreCase));
            historial.Items.Refresh();
        }
        #endregion

        #region Eventos
        private void MostrarConfiguracion(object sender, RoutedEventArgs e)
        {
            new DialogoConfiguracion().Show();
        }
        private void MenuNuevoAjedrecista_Click(object sender, RoutedEventArgs e)
        {
            //new DialogoRegistro().Show();
        }


        private void radioCheked(object sender, RoutedEventArgs e)
        {
            tipoFiltrado();
        }
        private void FiltrarPorNombre(object sender, TextChangedEventArgs e)
        {
            filtroNombre();
        }
        private void FiltrarPorCedula(object sender, TextChangedEventArgs e)
        {
            filtroCedula();
        }
        private void text_cedula_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            try
            {
                Regex regex = new Regex("^(-)?\\d+$|^-?$");
                e.Handled = !(regex.IsMatch(e.Text));
            }
            catch (Exception f)
            { }
        }

        private void text_nombre_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            try
            {
                Regex regex = new Regex("[a-zA-Z]+$");
                e.Handled = !(regex.IsMatch(e.Text));
            }
            catch (Exception f)
            { }
        }
        #endregion

        private void anadirCorte()
        {
            var periodo = Cargador.agragarPeriodo();
            foreach (Ajedrecista a in Aplicacion.ajedrecistas)
            {
                a.actualizarHistorial(periodo);
            }
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            anadirCorte();
            anadirColumna();
            tipoFiltrado();
            MessageBox.Show("Corte creado Exitosamente");
            historial.Items.Refresh();
        }
        private void anadirColumna()
        {
            Periodo periodo = Aplicacion.periodos[Aplicacion.periodos.Count-1];
            DataGridTextColumn column = new DataGridTextColumn();
            column.Header = periodo.fecha.Date;
            column.Binding = new Binding("historial [" + (Aplicacion.periodos.Count - 1) + "].puntajeElo");
            historial.Columns.Add(column);
            historial.Items.Refresh();
        }

        private void actualizarElo_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                new ActualizarElo((Ajedrecista)historial.SelectedItem, this).Show();
            }
            catch { }
        }
    }
}
